{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "乐学偶得 版权所有 主讲人 ：William 由LX_LAB教研团队提供技术支持 乐学偶得版权所有  公众号：乐学Fintech  正版视频课程 网易云课堂：乐学偶得 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import cv2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.4.1\n"
     ]
    }
   ],
   "source": [
    "print(cv2.__version__)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "【影像直方图】：回忆单反，手机照片里的“分析图”，水平轴代表的是其亮度，而其垂直轴代表的是该亮度所累积的像素数量，左边的区域代表的是较暗的部分，右边的区域则代表较亮的部分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import cv2\n",
    "\n",
    "im = cv2.imread('japan.jpg')\n",
    "vals = im.mean(axis=2).flatten()\n",
    "b, bins, patches = plt.hist(vals, 255)\n",
    "plt.xlim([0,255])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "im = cv2.imread('japan_B.jpg')\n",
    "vals = im.mean(axis=2).flatten()\n",
    "b, bins, patches = plt.hist(vals, 255)\n",
    "plt.xlim([0,255])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "im = cv2.imread('japan_D.jpg')\n",
    "vals = im.mean(axis=2).flatten()\n",
    "b, bins, patches = plt.hist(vals, 255)\n",
    "plt.xlim([0,255])\n",
    "plt.show()"
   ]
  },
  {
   "attachments": {
    "noise.jpg": {
     "image/jpeg": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "【噪点】图片，本质上就是一系列数据，这些数据是通过各种传感器产生的，额外信息或者错误信息\n",
    "![noise.jpg](attachment:noise.jpg)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "假设有真正的像素值（pixel value）$I(x,y)$ <br>\n",
    "假设在pixel$I(x,y)$里有噪点：$n(x,y)$<br>\n",
    "有$\\hat{I}(x,y)=I(x,y)+n(x,y)$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "介绍一种去噪原理【利用高斯分布去噪】："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np \n",
    "import scipy.stats as stats\n",
    "import math\n",
    "\n",
    "mu = 0\n",
    "variance= 1\n",
    "sigma = math.sqrt(variance)\n",
    "x = np.linspace(mu-3*sigma, mu+3* sigma,100)\n",
    "plt.plot(x,stats.norm.pdf(x,mu,sigma))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "中心极限定理（Central Limit Theorem）,因为通常情况下，噪声（noise）的来源独立且随机，所以我们不管每一个噪声是什么分布的，最终的分布趋于正态分布。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$ Sum = \\sum_{i=1}^n N_i $"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Derivative(导数)：\n",
    "1.速度——距离的变化率\n",
    "2.加速度——速度的变化率"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Discrete Derivative\n",
    "\n",
    "$\\frac{\\partial f}{\\partial x}= \\lim_{\\Delta x \\to 0} \\frac{f(x)-f(x-\\Delta x)}{\\Delta x}= f'(x) $"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$\\frac{\\partial f}{\\partial x}=\\frac{f(x)-f(x-1)}{1}= f'(x) $"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Backward Difference$\\frac{\\partial f}{\\partial x}= f(x)-f(x-1)= f'(x) $"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Forward Difference$\\frac{\\partial f}{\\partial x}= f(x)-f(x+1)= f'(x) $"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Central Difference$\\frac{\\partial f}{\\partial x}= f(x+1)-f(x-1)= f'(x) $"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Derivative 【Masks】<br>\n",
    "以下计算的是backward difference:<br>\n",
    "$f(x)= 10\\;15\\;10\\;10\\;25\\;20\\;20\\;20$<br>\n",
    "$f'(x)=0\\;5\\;-5\\;0\\;15\\;-5\\;0\\;0$<br>\n",
    "$f''(x)=0\\;5\\;-10\\;5\\;15\\;-20\\;5\\;0$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "-10+15联想到矩阵运算"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Backward difference [-1 1]<br>\n",
    "Forward Difference [1 -1]<br>\n",
    "Central Difference [-1 0 1] \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$f_x ----->\\frac{1}{3}\\begin{bmatrix}\n",
    "-1\\;0\\;1\\\\\n",
    "-1\\;0\\;1\\\\\n",
    "-1\\;0\\;1\\\\\n",
    "\\end{bmatrix}$<br>\n",
    "$f_y ----->\\frac{1}{3}\\begin{bmatrix}\n",
    "1\\;1\\;1\\\\\n",
    "0\\;0\\;0\\\\\n",
    "-1\\;-1\\;-1\\\\\n",
    "\\end{bmatrix}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "已知矩阵$I = \\begin{bmatrix}\n",
    "10\\;10\\;20\\;20\\;20\\\\\n",
    "10\\;10\\;20\\;20\\;20\\\\\n",
    "10\\;10\\;20\\;20\\;20\\\\\n",
    "10\\;10\\;20\\;20\\;20\\\\\n",
    "10\\;10\\;20\\;20\\;20\\\\\n",
    "\\end{bmatrix}$ 求$I_x,I_y$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$I_x = \\begin{bmatrix}\n",
    "0\\;0\\;0\\;0\\;0\\\\\n",
    "0\\;10\\;10\\;0\\;0\\\\\n",
    "0\\;10\\;10\\;0\\;0\\\\\n",
    "0\\;10\\;10\\;0\\;0\\\\\n",
    "0\\;0\\;0\\;0\\;0\\\\\n",
    "\\end{bmatrix}$<br>\n",
    "$I_y = \\begin{bmatrix}\n",
    "0\\;0\\;0\\;0\\;0\\\\\n",
    "0\\;0\\;0\\;0\\;0\\\\\n",
    "0\\;0\\;0\\;0\\;0\\\\\n",
    "0\\;0\\;0\\;0\\;0\\\\\n",
    "0\\;0\\;0\\;0\\;0\\\\\n",
    "\\end{bmatrix}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1)Correlation\n",
    "\n",
    "f= Image\n",
    "h= Kernel\n",
    "\n",
    "$f*h = \\sum\\limits_{k}\\sum\\limits_{l}f(k,l)h(i+k,j+l)$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$f = \\begin{bmatrix}\n",
    "f_1\\;f_2\\;f_3\\\\\n",
    "f_4\\;f_5\\;f_6\\\\\n",
    "f_7\\;f_8\\;f_9\\\\\n",
    "\\end{bmatrix}$<br>\n",
    "$h= \\begin{bmatrix}\n",
    "h_1\\;h_2\\;h_3\\\\\n",
    "h_4\\;h_5\\;h_6\\\\\n",
    "h_7\\;h_8\\;h_9\\\\\n",
    "\\end{bmatrix}$\n",
    "\n",
    "$f*h= f_1h_1+f_2h_2+f_3h_3+f_4h_4+f_5h_5+f_6h_6+f_7h_7+f_8h_8+f_9h_9$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2)Convolution(关键在于flip)<br>\n",
    "f= Image\n",
    "h= Kernel\n",
    "\n",
    "$f*h = \\sum\\limits_{k}\\sum\\limits_{l}f(k,l)h(i-k,j-l)$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$f = \\begin{bmatrix}\n",
    "f_1\\;f_2\\;f_3\\\\\n",
    "f_4\\;f_5\\;f_6\\\\\n",
    "f_7\\;f_8\\;f_9\\\\\n",
    "\\end{bmatrix}$<br>\n",
    "\n",
    "$h= \\begin{bmatrix}\n",
    "h_1\\;h_2\\;h_3\\\\\n",
    "h_4\\;h_5\\;h_6\\\\\n",
    "h_7\\;h_8\\;h_9\\\\\n",
    "\\end{bmatrix}$\n",
    "\n",
    "第一次翻转（X-flip）\n",
    "\n",
    "$h= \\begin{bmatrix}\n",
    "h_7\\;h_8\\;h_9\\\\\n",
    "h_4\\;h_5\\;h_6\\\\\n",
    "h_1\\;h_2\\;h_3\\\\\n",
    "\\end{bmatrix}$\n",
    "\n",
    "第二次翻转（Y-flip）<br>\n",
    "$h= \\begin{bmatrix}\n",
    "h_9\\;h_8\\;h_7\\\\\n",
    "h_6\\;h_5\\;h_4\\\\\n",
    "h_3\\;h_2\\;h_1\\\\\n",
    "\\end{bmatrix}$<br>\n",
    "\n",
    "\n",
    "\n",
    "$f = \\begin{bmatrix}\n",
    "f_1\\;f_2\\;f_3\\\\\n",
    "f_4\\;f_5\\;f_6\\\\\n",
    "f_7\\;f_8\\;f_9\\\\\n",
    "\\end{bmatrix}$<br>\n",
    "\n",
    "$f*h= f_1h_9+f_2h_8+f_3h_8+f_4h_6+f_5h_5+f_6h_4+f_7h_3+f_8h_2+f_9h_1$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "mean(求平均)：\n",
    "$I = \\frac{I_1+I_2+......+I_n}{n}$<br>\n",
    "weighted mean(加权平均):\n",
    "$I= \\frac{w_1I_1+w_2I_2+......+w_nI_n}{n}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Gaussian Filter:\n",
    "\n",
    "$g(x) = e^\\frac{-x^2}{2\\sigma ^2}$<br>\n",
    "$g(x,y) = e^\\frac{-(x^2+y^2)}{2\\sigma ^2}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import scipy.stats as stats\n",
    "import math\n",
    "\n",
    "mu = 0 \n",
    "variance = 1\n",
    "\n",
    "sigma = math.sqrt(variance)\n",
    "x =np.linspace(mu -3*sigma, mu +3*sigma,100)\n",
    "plt.plot(x, stats.norm.pdf(x,mu,sigma))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support. ' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>');\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option);\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>');\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib notebook\n",
    "import matplotlib.pyplot as plt\n",
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "\n",
    "import numpy as np\n",
    "from scipy.stats import multivariate_normal\n",
    "\n",
    "\n",
    "x, y = np.mgrid[-1.0:1.0:30j,-1.0:1.0:30j]\n",
    "\n",
    "xy = np.column_stack([x.flat,y.flat])\n",
    "\n",
    "mu = np.array([0.0,0.0])\n",
    "sigma=np.array([.5,.5])\n",
    "covariance = np.diag(sigma**2)\n",
    "\n",
    "\n",
    "z = multivariate_normal.pdf(xy, mean=mu, cov=covariance)\n",
    "\n",
    "z = z.reshape(x.shape)\n",
    "\n",
    "fig=plt.figure()\n",
    "ax=fig.add_subplot(111,projection=\"3d\")\n",
    "\n",
    "ax.plot_surface(x,y,z)\n",
    "# ax.plot_wireframe(x,y,z)\n",
    "\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Gaussian Model的特点：\n",
    "1.非常常见的Natural Model，平滑（Smooth）的函数，有无穷的derivative\n",
    "2.Fourier Transformation and Convolution of Gaussian is still Gausian \n",
    "3.*动物眼睛中有部分细胞也在进行Gaussian Filtering"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "【Erosion and Dilation】\n",
    "\n",
    "Erosion :就像大自然中的岩石的冲刷一般，保持“最大的架构”不变，细小的部分被“冲刷掉”，用途：图片比较"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from skimage import morphology\n",
    "from skimage import io\n",
    "\n",
    "img = io.imread('6.Gaussian_Noise.png')\n",
    "\n",
    "erosion_img = morphology.binary_erosion(img)\n",
    "\n",
    "io.imshow(erosion_img)\n",
    "io.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "Unsupported dtype",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\IPython\\core\\formatters.py\u001b[0m in \u001b[0;36m__call__\u001b[1;34m(self, obj)\u001b[0m\n\u001b[0;32m    339\u001b[0m                 \u001b[1;32mpass\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    340\u001b[0m             \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 341\u001b[1;33m                 \u001b[1;32mreturn\u001b[0m \u001b[0mprinter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    342\u001b[0m             \u001b[1;31m# Finally look for special method names\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    343\u001b[0m             \u001b[0mmethod\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mget_real_method\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mprint_method\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\IPython\\core\\pylabtools.py\u001b[0m in \u001b[0;36m<lambda>\u001b[1;34m(fig)\u001b[0m\n\u001b[0;32m    242\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    243\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[1;34m'png'\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mformats\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 244\u001b[1;33m         \u001b[0mpng_formatter\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfor_type\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mFigure\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mlambda\u001b[0m \u001b[0mfig\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mprint_figure\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfig\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'png'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    245\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[1;34m'retina'\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mformats\u001b[0m \u001b[1;32mor\u001b[0m \u001b[1;34m'png2x'\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mformats\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    246\u001b[0m         \u001b[0mpng_formatter\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfor_type\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mFigure\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mlambda\u001b[0m \u001b[0mfig\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mretina_figure\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfig\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\IPython\\core\\pylabtools.py\u001b[0m in \u001b[0;36mprint_figure\u001b[1;34m(fig, fmt, bbox_inches, **kwargs)\u001b[0m\n\u001b[0;32m    126\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    127\u001b[0m     \u001b[0mbytes_io\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mBytesIO\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 128\u001b[1;33m     \u001b[0mfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcanvas\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mprint_figure\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbytes_io\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkw\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    129\u001b[0m     \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mbytes_io\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetvalue\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    130\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mfmt\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;34m'svg'\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\backend_bases.py\u001b[0m in \u001b[0;36mprint_figure\u001b[1;34m(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, **kwargs)\u001b[0m\n\u001b[0;32m   2054\u001b[0m                         \u001b[0morientation\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0morientation\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2055\u001b[0m                         \u001b[0mdryrun\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2056\u001b[1;33m                         **kwargs)\n\u001b[0m\u001b[0;32m   2057\u001b[0m                     \u001b[0mrenderer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_cachedRenderer\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2058\u001b[0m                     \u001b[0mbbox_artists\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"bbox_extra_artists\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py\u001b[0m in \u001b[0;36mprint_png\u001b[1;34m(self, filename_or_obj, metadata, pil_kwargs, *args, **kwargs)\u001b[0m\n\u001b[0;32m    525\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    526\u001b[0m         \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 527\u001b[1;33m             \u001b[0mFigureCanvasAgg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    528\u001b[0m             \u001b[0mrenderer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_renderer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    529\u001b[0m             \u001b[1;32mwith\u001b[0m \u001b[0mcbook\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_setattr_cm\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdpi\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdpi\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m\\\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py\u001b[0m in \u001b[0;36mdraw\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    386\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrenderer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_renderer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcleared\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    387\u001b[0m         \u001b[1;32mwith\u001b[0m \u001b[0mRendererAgg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlock\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 388\u001b[1;33m             \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    389\u001b[0m             \u001b[1;31m# A GUI class may be need to update a window using this draw, so\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    390\u001b[0m             \u001b[1;31m# don't forget to call the superclass.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\artist.py\u001b[0m in \u001b[0;36mdraw_wrapper\u001b[1;34m(artist, renderer, *args, **kwargs)\u001b[0m\n\u001b[0;32m     36\u001b[0m                 \u001b[0mrenderer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstart_filter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     37\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 38\u001b[1;33m             \u001b[1;32mreturn\u001b[0m \u001b[0mdraw\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0martist\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     39\u001b[0m         \u001b[1;32mfinally\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     40\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0martist\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_agg_filter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\figure.py\u001b[0m in \u001b[0;36mdraw\u001b[1;34m(self, renderer)\u001b[0m\n\u001b[0;32m   1707\u001b[0m             \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpatch\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1708\u001b[0m             mimage._draw_list_compositing_images(\n\u001b[1;32m-> 1709\u001b[1;33m                 renderer, self, artists, self.suppressComposite)\n\u001b[0m\u001b[0;32m   1710\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1711\u001b[0m             \u001b[0mrenderer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclose_group\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'figure'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\image.py\u001b[0m in \u001b[0;36m_draw_list_compositing_images\u001b[1;34m(renderer, parent, artists, suppress_composite)\u001b[0m\n\u001b[0;32m    133\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mnot_composite\u001b[0m \u001b[1;32mor\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mhas_images\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    134\u001b[0m         \u001b[1;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[1;32min\u001b[0m \u001b[0martists\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 135\u001b[1;33m             \u001b[0ma\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    136\u001b[0m     \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    137\u001b[0m         \u001b[1;31m# Composite any adjacent images together\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\artist.py\u001b[0m in \u001b[0;36mdraw_wrapper\u001b[1;34m(artist, renderer, *args, **kwargs)\u001b[0m\n\u001b[0;32m     36\u001b[0m                 \u001b[0mrenderer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstart_filter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     37\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 38\u001b[1;33m             \u001b[1;32mreturn\u001b[0m \u001b[0mdraw\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0martist\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     39\u001b[0m         \u001b[1;32mfinally\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     40\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0martist\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_agg_filter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\axes\\_base.py\u001b[0m in \u001b[0;36mdraw\u001b[1;34m(self, renderer, inframe)\u001b[0m\n\u001b[0;32m   2643\u001b[0m             \u001b[0mrenderer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstop_rasterizing\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2644\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2645\u001b[1;33m         \u001b[0mmimage\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_draw_list_compositing_images\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0martists\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   2646\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2647\u001b[0m         \u001b[0mrenderer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclose_group\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'axes'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\image.py\u001b[0m in \u001b[0;36m_draw_list_compositing_images\u001b[1;34m(renderer, parent, artists, suppress_composite)\u001b[0m\n\u001b[0;32m    133\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mnot_composite\u001b[0m \u001b[1;32mor\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mhas_images\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    134\u001b[0m         \u001b[1;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[1;32min\u001b[0m \u001b[0martists\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 135\u001b[1;33m             \u001b[0ma\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    136\u001b[0m     \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    137\u001b[0m         \u001b[1;31m# Composite any adjacent images together\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\artist.py\u001b[0m in \u001b[0;36mdraw_wrapper\u001b[1;34m(artist, renderer, *args, **kwargs)\u001b[0m\n\u001b[0;32m     36\u001b[0m                 \u001b[0mrenderer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstart_filter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     37\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 38\u001b[1;33m             \u001b[1;32mreturn\u001b[0m \u001b[0mdraw\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0martist\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     39\u001b[0m         \u001b[1;32mfinally\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     40\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0martist\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_agg_filter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\image.py\u001b[0m in \u001b[0;36mdraw\u001b[1;34m(self, renderer, *args, **kwargs)\u001b[0m\n\u001b[0;32m    617\u001b[0m         \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    618\u001b[0m             im, l, b, trans = self.make_image(\n\u001b[1;32m--> 619\u001b[1;33m                 renderer, renderer.get_image_magnification())\n\u001b[0m\u001b[0;32m    620\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mim\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    621\u001b[0m                 \u001b[0mrenderer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdraw_image\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mgc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0ml\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mb\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mim\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\image.py\u001b[0m in \u001b[0;36mmake_image\u001b[1;34m(self, renderer, magnification, unsampled)\u001b[0m\n\u001b[0;32m    872\u001b[0m         return self._make_image(\n\u001b[0;32m    873\u001b[0m             \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_A\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mbbox\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtransformed_bbox\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbbox\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmagnification\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 874\u001b[1;33m             unsampled=unsampled)\n\u001b[0m\u001b[0;32m    875\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    876\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0m_check_unsampled_image\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\image.py\u001b[0m in \u001b[0;36m_make_image\u001b[1;34m(self, A, in_bbox, out_bbox, clip_bbox, magnification, unsampled, round_to_pixel_border)\u001b[0m\n\u001b[0;32m    502\u001b[0m                     \u001b[0m_interpd_\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_interpolation\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    503\u001b[0m                     \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_resample\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 504\u001b[1;33m                     self.get_filternorm(), self.get_filterrad())\n\u001b[0m\u001b[0;32m    505\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    506\u001b[0m                 \u001b[1;31m#resample rgb channels\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mValueError\u001b[0m: Unsupported dtype"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# not ok , binary erosion !\n",
    "from skimage import morphology\n",
    "from skimage import io\n",
    "\n",
    "img = io.imread('20.erosion_example.png')\n",
    "\n",
    "img_erosion = morphology.binary_erosion(img)\n",
    "\n",
    "io.imshow(img_erosion)\n",
    "io.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAD4CAYAAAC5S3KDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAal0lEQVR4nO3df6wlZ13H8ffH1qIUodtyIXV3tUVWkJgo9QarKDFUS1uRrQqmxtgNNtmYoILVyCqJEv1H/AUSTc1q0a1BfsiPdGOK0BSQmNjK3VL6g6XspWJ77dpebSlEVKx+/eM8p3v27Dn3zJz59cyczyu5uefMnXvmeebXZ+aZZ+YoIjAzM8vN13RdADMzs1kcUGZmliUHlJmZZckBZWZmWXJAmZlZlhxQZmaWpdYDStIVku6XtCnpUNvTNzOzflCb90FJOgv4HPBDwBbwSeAnI+IzrRXCzMx6oe0zqJcAmxHxQER8FXg3sL/lMpiZWQ+0HVC7gYcm3m+lYWZmZqc5u+Xpacaw09oYJR0EDgKce+653/XCF76wjXKZmVlHjh079m8RsTY9vO2A2gL2TrzfAzw8OUJEHAYOA6yvr8fGxkZ7pTMzs9ZJ+udZw9tu4vsksE/SxZLOAa4BjrZcBjMz64FWz6Ai4klJPwd8GDgLeEdE3NdmGczMrB/abuIjIm4Bbml7umZm1i9+koSZmWXJAWVmZllyQJmZWZYcUGZmliUHlFlPSbPuezcbDgeUWU+1+aBnsy44oMxWiM+6rE8cUGYrIsdwkpRluSwPrd+oa2bdcJOg9Y0Dysw649C0nbiJz87gZhczy4HPoOwMPqo1sxz4DMrMzLLkgLLsuHnRzMABZWZmmXJAWXZ8DczMwAFlZmaZckCZFTT07vdDrpv1k7uZmxU09KbHodfP+scBNUGSN1KzFux0tuZt0MYcUBO8YZhVU0czYZHP8La6GhxQZnOMd5TeGc7W5TWrWdP2choeB5SZFZJ7J4rJ8jmshsEBZTaHd3L5h9I8DqthcECZ2WmaDqUqgbFM2RxW/eWAMjOgvmBqMgR2+uwi5fd1xX5xQJmtsKqhlNOOfrosO9XNQdUPDiizFVQlmPqyU58s57z6Oqjy5oCyQtytdxiWCaYhLOdFYeWb9PPkZ/HZQn3tyWWnK7scI2KQO+159fJ6nh+fQQ1Ak0d/i9rxh7gDG5oyO962lud0mbpYj8bTnCxLzk1+Ocyzti19BiVpr6SPSTou6T5Jr0/Dz5d0q6QT6feuNFyS3i5pU9Ldki6pqxKrrotwanK6Vo8yT18f6tlSEX05mxqXc5WWVZUmvieBX4qIbwMuBV4n6UXAIeC2iNgH3JbeA1wJ7Es/B4EbKkzbGuZw6jcHUzl9C6lVsXRARcTJiLgzvf4ycBzYDewHjqTRjgBXp9f7gZti5HbgPEkXLl1ya4zDKU/jM6IiP4s4mM7k+ZGfWjpJSLoIeDFwB/DciDgJoxADnpNG2w08NPFvW2mYZaLIzm0IG3GZHXmXyoZOUUNYhk0pcy+VNa9yQEl6BvB+4A0R8aWdRp0x7IwtRdJBSRuSNra3t6sWzwooc9TdlqZ2ztOfldsOqMnwzOWsKbd5vkr6Nu8rBZSkr2UUTu+MiA+kwY+Mm+7S70fT8C1g78S/7wEenv7MiDgcEesRsb62tlaleFZAmWsVbZl3n0rVjSvXjbOtM7o+nDVas3I4QCmjSi8+ATcCxyPiDyb+dBQ4kF4fAG6eGH5t6s13KfDEuCnQ2le2h1ebFj1vreoDQ3PRVWA0Oc06ro/lpo9lHooq90G9FPhp4B5Jd6Vhvwb8NvBeSdcBDwKvSX+7BbgK2AS+Ary2wrRtScvcrJmjMver7FTnLupXxw5vXrmLfnaZe9i8g7auLB1QEfH3zL6uBHDZjPEDeN2y07Pq+hROs26inGXRjjanneuyZSmzHCKiVEjlwjd92yx+kkTG6rpzfJkdUS47iyJBNe9sKqceiW2EU5/lXM+cyzZ0fhZfpuZ1FCj7GX0Op0llm/IWNesNOZxy6a3XRzmdVZrPoAZriEfsZc6mFn1GW7o8QCjT3GcOpxw5oHqkaoeAOj4/B8vueHMPpybKV+Q7kZqY1k5yDIIcy2QOqF6ZdyG5yV5huSraiWJ6/By1VbZ5wT4dYjnPqybk1svTTnFA9UzdR3p93wD73oyV2/zPrTxNczjlzZ0kMtXGxjGEDTDnLtWL5m/uTY5D53DKnwNqRQ1hA2yrV2MVuc/n3MvXhEXrwSrOk1w5oDK2THfhIuMPYQOsEjSrGFK5nD11WY4iByg5LCs7xdegemCnnlhlbk4dysZXZCdT5AkU43GHbt68WIW6j+X2tH4rxgHVM8s+g20oG1/Retb1qKQ+W4WDlUWG0MtzlTmgBsDhNDKrnqt6NpVLk15XHEzD4IDquVUIp6rNM2XOphZ9Vu5WuSkrhxujrV4OqBn60uzjcBopWs+i90y1tfzrnk6u60PT5XIwDZcDqqdy3RnVpakmmtzOpqqGVK5NWW00MTqYhs8BNUPuK7LDaaRKPdvuRLHT2dsy0yizc25rfcgxlMb6vk2sKgdUzzicRtp84nddZ1OLQmrW+PP+VnR6bWk6nPowD6x+DqgB6fvG2FVzVa5d0vvwZPplzuQm/2fZ2yaKTsv6zQHVI0O+ryWH3mdFz6aqNi02ebaRY4BOl8mhZEU5oHqiajjlfEE5h3Cank4bIVLXNLrYMVddZnXOXwfTcDmgemCZcKq6AyjSDNOWLqafe1B1uUxyeIJ81+uktcMBlbmi4dTkzqCOsFr0RXnzdL0jmm6Sa/pbb21nnlerZeUCqi834cLicOricTZlerQN5ZpCLuVYVZ7/q2vlAqqr9vq673Pp+llrdYbPrLD1TilfbRwcefkX06cD7mWsXEB1ocmbMKtq41pLmXJYP9QdUl7+NosDauDKPKduWlOh5Z3RMFQJKa8D9Rj6fHRAZSan6zZD6A5tzfIytSY5oDKS69FoHUHlHZmZleWA6qku7w2CvG6uNbNhckBlItevTZgnl3KY2XB9TdUPkHSWpE9J+pv0/mJJd0g6Iek9ks5Jw5+W3m+mv19UddqrJCIcCmYroutetbmoHFDA64HjE+/fArw1IvYBjwPXpeHXAY9HxPOBt6bxbAEHk9lqcTidUimgJO0Bfhj4s/RewMuB96VRjgBXp9f703vS3y+Tl8RTZoWQg8ls9fig9JSqZ1BvA34F+L/0/gLgixHxZHq/BexOr3cDDwGkvz+Rxu+NNu6en/wxM1tlSweUpFcCj0bEscnBM0aNAn+b/NyDkjYkbWxvby9bvEY4NMzM2lPlDOqlwKskfQF4N6OmvbcB50ka9w7cAzycXm8BewHS358FPDb9oRFxOCLWI2J9bW2tQvHMhkfSaT/WD15Wy1k6oCLiVyNiT0RcBFwDfDQifgr4GPDqNNoB4Ob0+mh6T/r7R8OnJGZmNkcdvfimvRG4XtImo2tMN6bhNwIXpOHXA4camLbZoPk6ZT95WS2nlht1I+LjwMfT6weAl8wY57+A19QxPTMzG74mzqB6x+3DZmb5WflHHTmczKqbtR25WcuqWvkzKLfl26rywZnlbuXPoMxW1U5fo1L2oM0HedYEB9SKk+Sdy4qbXv4+s7JcrHwT36pbNpy8ExsuH7BYLhxQthTvxMysaQ4oMzPLkgPKsuHny60eL2/biQPKsuOgWg1exraIe/FZNiava80KKV/3Wo57alpf+QxqQp+P6IZ21jHrgahDql+bHE7WVz6DmtDnDbnPZV9kyHVbZV6utojPoCrwEb2ZWXMcUBX4CNDMrDkOKDMzy5IDyszMsuSAMjOzLDmgzMwsS+5mbtZjkz1J3WnHhsZnUGY9NOvGbN/2YEPjMyizmowDoskzGYeQrRIHlFlFbYWGw8lWjQPKbEmzAqOJs6eiweRrUDY0vgbVUz6a7s68B/M6nMzq5YCqQZthMblzdEi1b14wOZzM6ueA6ol5R+0Oqfa0ddY0b1qzOJxsyAYRUF3vpJveSexUP++gmtdmk954ekV42dvQuZNE5hxO3WozmOZNbxYve1sFDqhMLdpReQfVvBzPmposg1luKjXxSTpP0vskfVbScUnfI+l8SbdKOpF+70rjStLbJW1KulvSJfVUYViKfHV7FzuocbmG9tXy8+QYTk11xjDLVdVrUH8I/G1EvBD4DuA4cAi4LSL2Abel9wBXAvvSz0HghorTPk3fd5pFd/xt76B26pzR93k+T67hZLZqlg4oSc8EXgbcCBARX42ILwL7gSNptCPA1en1fuCmGLkdOE/ShUuXfEBy3EkVDaAhhZQ7Q5jlpcoZ1POAbeDPJX1K0p9JOhd4bkScBEi/n5PG3w08NPH/W2lYZX3dgMucheRcxyGE1Lw6dBlOTTTptXHmu0pNwdasKgF1NnAJcENEvBj4D041580ya209Y+uTdFDShqSN7e3tUgWavk6S8waS80XxnOdbE+q6+bboetdVU+7kdIsu47LbVF+esN6X/cSqqxJQW8BWRNyR3r+PUWA9Mm66S78fnRh/78T/7wEenv7QiDgcEesRsb62tla4MDmfYUwqu0H0pV5VzdoRtrEDqeuzy+zwd9JmR4hlg7Spm8YXrQN1LKumym7NWDqgIuJfgYckvSANugz4DHAUOJCGHQBuTq+PAtem3nyXAk+MmwLrMt64J39yUnYjqFr+ZTfs3OYblJt3Va+flan/ommV2cHmNN+Lzr/xeG3t4Heaj1UDziGVn6r3Qf088E5J5wAPAK9lFHrvlXQd8CDwmjTuLcBVwCbwlTTuSlhmxa+ys5p3hFjmMyPiqc+ZfD1v3Crq3DFMN2NNl63OkFgUTEXVEUxFls/0cpw33bLLo67lt2g9m55mmfGtnyoFVETcBazP+NNlM8YN4HVVptc3y248dYfTsnI6oi9alumdVlOdUOqYz20F+2RQL5pm3Tv8snWcNf5OZ0zT/+fAGhY/SaIBVTaSXMKp6OfWEWJNn6EVmX5RdZ4tlNXlzneZAKhruZVZP9o8qypyNmrVOKAmTDZpVfn/ZQ09nNrauZXZmdYVTmWO/PsaTpOvczxTKXO2XKX8dTShWzEOqGRWs1CRFa7LI+oyZehqp9hlB43Jz6qjh1mR6Swav6udWJ070Co9FrsM5zrOtHJbrkPngEpmrbB1bxhNrNxdnDnBzmWuenTa1sZexwFIk+G0zIFH02c2dQR9E02qdXV+mVe+Ls4Y3YTogGpUkSP4rpoTq3x2LhtwUcseydfZ46/MDnLe/y86s2/qOl7XzYtV69V0B5imb6oev1/FkBrEFxbWpc6LunU2L01zOBW3bNmWDacq01t0EJPjvX1lNdWEO+9zd5peXR18rDk+g5qy7EXgZVbUttrjqx69l/2cRbq+0F61ebKOrtNFp9f2TrTstZmiy7KOTi9FxsutibjKZ7uJzwE1105t+3W0oefUk6upThZ1/G8VZZr26pgHbU9v1vjTn9v0TrSN6ZRRxzxrYjrLyGWedskBVVCXK0vRnVmdvZKmP7ustm8IXVZTN/JWmVaV6RW5VlXmM+osW66aui3BqnNANaiOs6cmN5q6Prup6wp1W+a6YNXydHHBPZfP6JudgmoV50cOHFAZa6pdv82zhq7Mu5myjLbr3+f5PSReDvlwQDWkytlTDjfeNr2Rtn29pAwHk1keHFCZaSKccgqmrqZVRNXylLkOmFvdzXLkgMpEDhdoV3Wn2cQ1tFzPDs36xAHVoja7HJcxxJ1n1z3RhjhPzdrmgGpAXc8PGyt7o2IZQ96RDrluZqvAAdWRJu8/6vqMzMysDg6oFrX5fUi+l8PM+s4B1YBln+ow+f91lMHMrM8cUBlxqJiZneKv22hInU+8NjNbRQ6oBhV9jp3DyczsTG7ia9j0A0odRmZmxfgMqkUOJzOz4hxQZmaWJQeUmZllyQFlZmZZckCZmVmWHFBmZpYlB5SZmWXJAWVmZlmqFFCSflHSfZLulfQuSV8n6WJJd0g6Iek9ks5J4z4tvd9Mf7+ojgqYmdkwLR1QknYDvwCsR8S3A2cB1wBvAd4aEfuAx4Hr0r9cBzweEc8H3prGMzMzm6lqE9/ZwNdLOht4OnASeDnwvvT3I8DV6fX+9J7098tU5TspzMxs0JYOqIj4F+D3gAcZBdMTwDHgixHxZBptC9idXu8GHkr/+2Qa/4Jlp29mNkSSZv6soipNfLsYnRVdDHwjcC5w5YxRxw+gmzWHz3g4naSDkjYkbWxvby9bPLOnrPIGbv0z/oaD6Wd3ruJ6XKWJ7weBf4qI7Yj4H+ADwPcC56UmP4A9wMPp9RawFyD9/VnAY9MfGhGHI2I9ItbX1tYqFM/sFD+o1/poMqxW8at5qgTUg8Clkp6eriVdBnwG+Bjw6jTOAeDm9Ppoek/6+0dj1ea2dcKrmVk/VbkGdQejzg53AvekzzoMvBG4XtImo2tMN6Z/uRG4IA2/HjhUodxm1nOr1lxl5Snno8v19fXY2Njouhhm1gB/gaeNSToWEevTw/0kCfORrHXC4VSPIW+//sr3CuatGN7wzKwNQw4ncEDVps+h1OeyW7t22iF6PWrf0Oe5A6qCoa8cZvN43bc2OKDMrDAHk7XJAWVm1gE3ly7mgDIz64BDaDF3Mzczsyw5oMzMLEsOKDMzy5IDyqwHhn5DptksDiizHvAFdVtF7sVXQpGj2Nx2JH4gp5n1lQOqhHk7+pybXxxOZtZXDqgaOATMzOrna1BmZpYlB5SZmWXJAWVmZllyQNkg5NxRxcyW44Cy3nM4mQ2Te/FZ77kXpdkw+QzKzMyy5IAyM7MsOaDMzCxLDigzM8uSA8rMzLLkgDIzsyw5oMzMLEsOKDMzy5IDyszMsrQwoCS9Q9Kjku6dGHa+pFslnUi/d6XhkvR2SZuS7pZ0ycT/HEjjn5B0oJnqmJnZUBQ5g/oL4IqpYYeA2yJiH3Bbeg9wJbAv/RwEboBRoAG/AXw38BLgN8ahZmZmNsvCgIqITwCPTQ3eDxxJr48AV08MvylGbgfOk3Qh8Arg1oh4LCIeB27lzNAzMzN7yrLXoJ4bEScB0u/npOG7gYcmxttKw+YNNzMzm6nuThKzvvcgdhh+5gdIByVtSNrY3t6utXBmZtYfywbUI6npjvT70TR8C9g7Md4e4OEdhp8hIg5HxHpErK+trS1ZPDMz67tlA+ooMO6JdwC4eWL4tak336XAE6kJ8MPA5ZJ2pc4Rl6dhZmZmMy38wkJJ7wJ+AHi2pC1GvfF+G3ivpOuAB4HXpNFvAa4CNoGvAK8FiIjHJP0W8Mk03m9GxHTHCzMzs6co528jXV9fj42Nja6LYWZmDZJ0LCLWp4f7SRJmZpYlB5SZmWXJAWVmZllyQJmZWZYcUGZmliUHlJmZZckBZWZmWXJAmZlZlhxQZmaWJQeUmZllyQFlZmZZyvpZfJK+DNzfdTlq8Gzg37ouREWuQx6GUAcYRj1ch/p8c0Sc8f1KC59m3rH7Zz1AsG8kbfS9Hq5DHoZQBxhGPVyH5rmJz8zMsuSAMjOzLOUeUIe7LkBNhlAP1yEPQ6gDDKMerkPDsu4kYWZmqyv3MygzM1tR2QaUpCsk3S9pU9Khrsszj6S9kj4m6bik+yS9Pg1/s6R/kXRX+rlq4n9+NdXrfkmv6K70p0j6gqR7Ulk30rDzJd0q6UT6vSsNl6S3pzrcLemSbksPkl4wMa/vkvQlSW/ow3KQ9A5Jj0q6d2JY6Xkv6UAa/4SkAxnU4XclfTaV84OSzkvDL5L0nxPL5E8m/ue70nq4meqpjutQev3pet81px7vmajDFyTdlYZnuSyeEhHZ/QBnAZ8HngecA3waeFHX5ZpT1guBS9LrbwA+B7wIeDPwyzPGf1Gqz9OAi1M9z8qgHl8Anj017HeAQ+n1IeAt6fVVwIcAAZcCd3Rd/hnrz78C39yH5QC8DLgEuHfZeQ+cDzyQfu9Kr3d1XIfLgbPT67dM1OGiyfGmPucfge9J9fsQcGXHdSi1/uSw75pVj6m//z7w6zkvi/FPrmdQLwE2I+KBiPgq8G5gf8dlmikiTkbEnen1l4HjwO4d/mU/8O6I+O+I+Cdgk1F9c7QfOJJeHwGunhh+U4zcDpwn6cIuCjjHZcDnI+Kfdxgnm+UQEZ8AHpsaXHbevwK4NSIei4jHgVuBK5ov/cisOkTERyLiyfT2dmDPTp+R6vHMiPiHGO0hb+JUvRs3ZznMM2/96XzftVM90lnQTwDv2ukzul4WY7kG1G7goYn3W+y808+CpIuAFwN3pEE/l5o33jFuoiHfugXwEUnHJB1Mw54bESdhFMTAc9LwXOswdg2nb4B9Wg5jZed97vX5GUZH4WMXS/qUpL+T9P1p2G5G5R7LpQ5l1p/cl8P3A49ExImJYdkui1wDalZbZ9bdDSU9A3g/8IaI+BJwA/AtwHcCJxmdVkO+dXtpRFwCXAm8TtLLdhg31zog6RzgVcBfp0F9Ww6LzCt3tvWR9CbgSeCdadBJ4Jsi4sXA9cBfSXomedah7PqTYx0m/SSnH7xlvSxyDagtYO/E+z3Awx2VZSFJX8sonN4ZER8AiIhHIuJ/I+L/gD/lVPNRlnWLiIfT70eBDzIq7yPjprv0+9E0epZ1SK4E7oyIR6B/y2FC2XmfZX1SZ41XAj+VmopIzWL/nl4fY3TN5lsZ1WGyGbDzOiyx/mS5HAAknQ38GPCe8bDcl0WuAfVJYJ+ki9MR8TXA0Y7LNFNq070ROB4RfzAxfPKazI8C4x41R4FrJD1N0sXAPkYXIzsj6VxJ3zB+zeji9r2MyjruDXYAuDm9Pgpcm3qUXQo8MW6OysBpR4h9Wg5Tys77DwOXS9qVmqEuT8M6I+kK4I3AqyLiKxPD1ySdlV4/j9G8fyDV48uSLk3b1bWcqncnllh/ct53/SDw2Yh4quku+2XRdq+Moj+Meit9jlGiv6nr8uxQzu9jdOp7N3BX+rkK+EvgnjT8KHDhxP+8KdXrfjroGTOjDs9j1Nvo08B94/kNXADcBpxIv89PwwX8carDPcB613VI5Xo68O/AsyaGZb8cGAXqSeB/GB25XrfMvGd0nWcz/bw2gzpsMroeM94u/iSN++NpPfs0cCfwIxOfs84oBD4P/BHpYQId1qH0+tP1vmtWPdLwvwB+dmrcLJfF+MdPkjAzsyzl2sRnZmYrzgFlZmZZckCZmVmWHFBmZpYlB5SZmWXJAWVmZllyQJmZWZYcUGZmlqX/B3zagQDF1wi2AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# not ok , binary erosion !\n",
    "from skimage import morphology\n",
    "from skimage import io\n",
    "from skimage.color import rgb2grey\n",
    "\n",
    "\n",
    "img = io.imread('20.erosion_example.png')\n",
    "\n",
    "img_grayscale = rgb2grey(img)\n",
    "\n",
    "img_erosion = morphology.binary_erosion(img_grayscale)\n",
    "\n",
    "io.imshow(img_erosion)\n",
    "io.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "io.imshow(img_grayscale)\n",
    "io.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0, 0, 0, 0, 0, 0, 0],\n",
       "       [0, 0, 1, 1, 1, 0, 0],\n",
       "       [0, 0, 1, 1, 1, 0, 0],\n",
       "       [0, 0, 1, 1, 1, 0, 0],\n",
       "       [0, 0, 1, 1, 1, 0, 0],\n",
       "       [0, 0, 1, 1, 1, 0, 0],\n",
       "       [0, 0, 0, 0, 0, 0, 0]])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from scipy import ndimage\n",
    "import numpy as np\n",
    "a = np.zeros((7,7), dtype=int)\n",
    "a[1:6, 2:5] = 1\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0, 0, 0, 0, 0, 0, 0],\n",
       "       [0, 0, 0, 0, 0, 0, 0],\n",
       "       [0, 0, 0, 1, 0, 0, 0],\n",
       "       [0, 0, 0, 1, 0, 0, 0],\n",
       "       [0, 0, 0, 1, 0, 0, 0],\n",
       "       [0, 0, 0, 0, 0, 0, 0],\n",
       "       [0, 0, 0, 0, 0, 0, 0]])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ndimage.binary_erosion(a).astype(a.dtype)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1.腐蚀（求局部最小值），比如说有图A，然后有一个maskB，腐蚀也是将maskB作用与A的过程，将A边缘部分的区域腐蚀掉（binary的话，变成白色）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "# not ok , binary erosion !\n",
    "from skimage import morphology\n",
    "from skimage import io\n",
    "from skimage.color import rgb2grey\n",
    "\n",
    "\n",
    "img = io.imread('20.erosion_example.png')\n",
    "\n",
    "img_grayscale = rgb2grey(img)\n",
    "\n",
    "img_erosion = morphology.binary_dilation(img_grayscale)\n",
    "\n",
    "io.imshow(img_erosion)\n",
    "io.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "io.imshow(img_grayscale)\n",
    "io.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAD4CAYAAAC5S3KDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAZmklEQVR4nO3df6ws533X8fe3dh2I28Q/chOZe03t0EtDhARxj4JLaITq4thum2ugQa4qfBUsXSGlkBAQcYlEK/in4UdTIpArU4deo5AfpKl8hVxSy0mpkLDJseP4RxzHN25q3/rWvq0dJyJAavrlj32Ovd6755zdnV/P7L5f0tHZnZ2deZ6ZnfnsPPPMbGQmkiTV5ruGLoAkSfMYUJKkKhlQkqQqGVCSpCoZUJKkKhlQkqQq9R5QEXFNRDwWEScj4ua+5y9JGofo8zqoiDgH+Crw14BTwBeAn8rML/dWCEnSKPR9BPVW4GRmPpGZ3wE+ARzpuQySpBHoO6AOAk9NPT9VhkmS9Arn9jy/mDPsFW2MEXEMOAZw/vnn/+Cb3vSmPsolSRrIfffd9weZeWB2eN8BdQq4dOr5IeDp6REy81bgVoCtra3c3t7ur3SSpN5FxO/OG953E98XgMMRcXlEnAfcAJzouQySpBHo9QgqM1+MiJ8BPgucA3w0Mx/pswySpHHou4mPzLwTuLPv+UqSxsU7SUiSqmRASZKqZEBJkqpkQEmSqmRASSMVMe+6d2l9GFDSSPV5o2dpCAaUJKlKBpS0QWprFqytPKqLASVtEJsFNSYGlKTBGJjaiwGls9jsIqkGBpTO4rdaSTUwoCRJVTKgJElVMqAkSVUyoCRJVTKgJElVMqAkSVUyoCRJVTKgpniBqiTV49yhC1ATL1CV2tPFFz630c1iQElqpM+Wh3nzMrTWlwEl7SIi3PnNqLEZfLZMrrP1YUBJu3BHN1FjKO1luryuw3EzoCSdpc1Q6iokFimjYTVuBpQkoHko9R0Au81vt3rsDDeoxsOAkjbcqsFU645+ulzz6mZQjYcBJW2oZYNpjDv0vcLKoKqfAaWluFGP3zLBtE7rebew8jNdLwNK+9qtmcQNelw2NZjmycy5R1TrXu+xMaC0p7F1MdbZFl2Hfe+chz5y2Znv7NFU7SE1hjK2ZeV78UXEpRHx+Yh4NCIeiYj3luEXRcRdEfF4+X9hGR4R8ZGIOBkRD0bEFW1VQtJ8i4RTZg4WTrOPhzBb/6HLs59NCSdodrPYF4F/mJl/DrgSeE9EvBm4Gbg7Mw8Dd5fnANcCh8vfMeCWBvNWD/baUDdpIxmr/Xa0QwRTzcYUUpti5YDKzNOZeX95/C3gUeAgcAQ4XkY7DlxfHh8Bbs+Je4ALIuKSlUuuThlOdYuIuX/Tr+/Fdbg/Q2p4rfzcRkRcBrwFuBd4Q2aehkmIAa8vox0Enpp626kyTBWZ3dFNW5dv3PN26LXaL4h2G38367IOu+KyqUvjgIqI7wF+DXhfZn5zr1HnDDvr0xARxyJiOyK2z5w507R4WtAiO7Y+9RUitYXUokG0Cne+y6vt89HU2OrTKKAi4ruZhNPHMvMzZfAzO0135f+zZfgp4NKptx8Cnp6dZmbemplbmbl14MCBJsXTAsZwJNFmGWut6yaGca3WOcjHVrcmvfgCuA14NDN/ceqlE8DR8vgocMfU8BtLb74rgRd2mgI1jFq7H++myU58t/cOWbchmhr7DqllmyilaU2ug3ob8LeBhyLigTLsnwC/AHwqIm4CngTeVV67E7gOOAl8G3h3g3mrgTFcsDnvQsody14/U9sOset73+03/Tauo6ltmWo9rRxQmfnfmX9eCeCqOeMn8J5V56fmxnbvtXkXUk5bJKhqOq8G9awDA2Z3Lpt6tNKLT91pq0mklh3jKvYry34Btso029Zn01ZN605qwoCq2Ox1Lavs4JZ9X63dkPcr12wdawunVTQpZ43rcAw8eqqL9+KrVNMNZZX3j2Gntsi5qf3e36chj1z3ayLty2ydhi6PxsOAGolldlzrGk47Vt3x1lzHLsvWVUDUvDxXUVsvTxlQo7Ffz6smO52xboR7HU3NG7dGNZSrhjIMzaO6OhlQI9LFRjT2ndMiR1O11rGGXoS1Lpu+jPFzs0nsJFGprjeOWjtDrGKR636kWYZT/Qyoiq26kez3vnXZ+JbpoTjUHQxqWtYG9csMp3EwoCq3zJHOzribsPE1ueVR3+Yt8xp6E9byWeizHLXdFFl78xzUSLRxm5t12fj2C5k27kCxTjxy8vexxsojqDViOL2ynovcgWKonXdf891tPuvyeViE4TReBtSaMJx2b0pb9VZJY7fp4bTIF5BNWRZjZRPfGtj0cFqkjvudm1unZr+aPw+1/ObV0MtBizGgRq7mnVFb2qrjItdMdRVU8wKyjZ+9mJ3efmUYUpfhZDCtJwNqxNY5nLq8r96iQTWWZVjjPQihn6bTMfy2mVZnQI2U4dS8jjU0+zWZR43BNHTnj3nGvj1sMgNqhAynfu/43dbRVNNfCa755rjLNLFNj9vlTZDHvi3IgBodw6mbOvZ17dSiR21N59GnZdebd+bXogyoETGcuq/jIgHSdUg1mW6fulhnQ/y4o+plQI1EF+E0pjtb91m2Pn7or615DLXO2uoxONb6qx8G1AisGk7LbvxD3a+t1u7RXR3pzM4D1qeb9G7la3M51r4M1B4DqnLLhFMXO9NVT2jvNb1Vrl0aSpOT+svOZyy6Poe2mzEtI7Vj4wJqXa5v6aMZatYqHQXmlW92Hex2pFLLeqqlHLXo48hyel7aXBsXUENdsNj2fIe8f9x+RxSr9rxap9sNaTWu++WM6Qv3KjYuoIbQ1UWYXZVjmXm32Q14nTe0ddPWUZTrvJl1X34GVIXaCqemtwJqsyzzpq1xW7cOHqqPAVWZJoHQxQ6gzXNd7qDWk+tVXTGgRq6vnUOToHIHJmkVBlRFxtBUskjXdgNJUhsMqErUcqufZdVYJknrofFPvkfEORHxxYj4L+X55RFxb0Q8HhGfjIjzyvBXlecny+uXNZ33pljkZ8slad00DijgvcCjU88/BHw4Mw8DzwM3leE3Ac9n5vcDHy7jaR8Gk6RN1SigIuIQ8GPAr5TnAfwI8OkyynHg+vL4SHlOef2qGPJq08rMBpFHTZI2XdMjqF8C/jHwx+X5xcA3MvPF8vwUcLA8Pgg8BVBef6GMr2InlAwmSWoQUBHx48CzmXnf9OA5o+YCr01P91hEbEfE9pkzZ1YtniRp5JocQb0NeGdEfB34BJOmvV8CLoiInd6Bh4Cny+NTwKUA5fXXAs/NTjQzb83MrczcOnDgQIPiSZLGbOWAysyfzcxDmXkZcAPwucz8aeDzwE+W0Y4Cd5THJ8pzyuufS9uypJV5Clfrro1efLM+ALw/Ik4yOcd0Wxl+G3BxGf5+4OYO5i1tDL/fad21cqFuZv4W8Fvl8RPAW+eM83+Ad7UxP0nS+uviCEqSpMYMKElSlQwoSVKVDChJL4kIeweqGt7NXNJL7BmomngEJUmqkgElSaqSASVJqpIBJUmqkgGlqtiLTNIOA0pVmf49LMNq/bl+tRcDasrYN5axl3+WP964/ly/2osBNWXsG8vYyy9J0wwoSVKVDChJUpUMKElSlQwoSVKVDChJUpUMKElSlQwoSVKV/D0oaaTmXZjttXBaJwaUNDLrdscQaTcGlNSC6dDo6ijGYNKmMaCkBmZDY8hwsnlP68aAklbQVzDNm9c8hpPWkQE1Qn00J2l3NR01dTl/aWgG1Ih4DmJYtR01dV0GaWheBzUShtOwDCepfx5BVW6vnZU7qH7UFk6ud22KtTiCWtejC8NpWPN+ct5wkvrTKKAi4oKI+HREfCUiHo2IH4qIiyLiroh4vPy/sIwbEfGRiDgZEQ9GxBXtVGH9zNsxTnMn1b2+79JgOElna3oE9W+A/5qZbwL+AvAocDNwd2YeBu4uzwGuBQ6Xv2PALQ3nvXb2Cybofye1U6bd/taR4STVYeWAiojXAG8HbgPIzO9k5jeAI8DxMtpx4Pry+Ahwe07cA1wQEZesXPIpmTnqneWiO/shwqmNccZkXpPekOHU9fylmjU5gnojcAb4DxHxxYj4lYg4H3hDZp4GKP9fX8Y/CDw19f5TZdhGq7XH1roFzyL6Pt9U29Fymzbx86P2NQmoc4ErgFsy8y3A/+Ll5rx55n1iz9oCI+JYRGxHxPaZM2eWKtD0RlF7E9Qy5at9R1Xzcl5EW50hFl2nQx41rdI8u8r4q7xPmtUkoE4BpzLz3vL800wC65mdprvy/9mp8S+dev8h4OnZiWbmrZm5lZlbBw4cWLgwOxv1zgZRc9PIMhttrXWY1lYZhzjP1db0Z78crTq/oc91zY4/70vfXuul6fLs+nznpp1PHbuVAyozfx94KiJ+oAy6CvgycAI4WoYdBe4oj08AN5befFcCL+w0Bbap5h36shtC07q0ufF1vVyb7NTbnueydV30qGm/npk1fXZXORLs48vEMst6XsBqXJpeqPv3gI9FxHnAE8C7mYTepyLiJuBJ4F1l3DuB64CTwLfLuBth2Q2jjR3VvJ3HMtOdHXfojXuZ8k8fRe/1+qw2g2mo5tu9eiDu/N9vWS7bnLdXJ6Vl6zddxv3Kt8i4i7yuejUKqMx8ANia89JVc8ZN4D1N5jdGNYRTl/r61r/qOaGupl/LUemiRxTT8+ojFJuaLuN+zYnz6rNKmZb9EqfueaujjqyygbTRpNeFIb+BrrJMlr3soK1wWma+TdZ13+tj1aPptnb2ex0prRJOix55LWK/o3U1Y0BNaePDNtTOvKuT7/udN1nV9HS7OP+y6E6ozXCanV5bzV57Tatti8xnkWXb11Ha7FFPX51QbDbshwE1x7KH+m1s1DWGYls7oGXOEXQVVPPK0VYdmpzba0ubRwWL6HMHvei8+ggng6lfBtQu9tpprtp8tEnhVNuG3KQ8qyyLRZujuph3l5qGRZdfQNoYb68vp33VadHybAIDaspu5xDaOJ+0CeHUVpt+nz3bln3fItNoGk5thVvbavvSsaguO8D0cd3aJoeUATWj6X39+mru6WojWrX305g0DadlQ3rZ7vFDvX9n3GWvb1p0m1n18z5v+otMa79xmm7r6p4BNccy7fl9N3d1uUF13YY/xLVVbQfuqtf19DG/IXa4051DumwCayOQdnvPqstsU49q+mRA7aHLD2AXPbmabGxdhFNf72lr+n31AOtzfl3ttOdNd6w77K4vS1jVWJdnmwyojvV5snyocJrdwGvZsBZtFmorKBaZX5dNYU3fOzudWs+FdaHrZkqtxoCqXBvhseq0F5n+suPVpOsd0hAXa7epprL0YdPqOwYGVIe66M216rT6nPaq+ppnjd+U3TlKZzOgKjXEnSGaTntZ080qfcyz61v0rHIO0GCSdmdAdaSWzgq17zBr2UF3fe6mi3lJ686A6tF+O6Yhd2ybutPsot6buiylthlQFWir2W3VbubrukNd9QJPSXUwoAbmUVO3NqGO0royoAbSVWcFz4FIWhcGVI+67kU27/3+oJqksTKgKjPUzxFIUm2+a+gCrKsa70MnSWPiEVQFDCZJOpsB1aH9buJqMEnS7gyoHhhEkrQ8z0FJkqpkQEmSqmRASZKqZEBJkqpkQEmSqmRASZKqZEBJkqpkQEmSqtQooCLiH0TEIxHxcER8PCL+RERcHhH3RsTjEfHJiDivjPuq8vxkef2yNiogSVpPKwdURBwE/j6wlZl/HjgHuAH4EPDhzDwMPA/cVN5yE/B8Zn4/8OEyniRJczVt4jsX+JMRcS7wauA08CPAp8vrx4Hry+Mj5Tnl9atild8nlyRthJUDKjN/D/hXwJNMgukF4D7gG5n5YhntFHCwPD4IPFXe+2IZ/+JV5y9J6yoiXvG3qZo08V3I5KjocuBPAecD184ZdedOqfOW8ll3UY2IYxGxHRHbZ86cWbV40its8kau8cnMl/6AjQ2qJk18Pwr8Tmaeycw/Aj4D/GXggtLkB3AIeLo8PgVcClBefy3w3OxEM/PWzNzKzK0DBw40KJ40ERHeUV6jNRtWm6RJQD0JXBkRry7nkq4Cvgx8HvjJMs5R4I7y+ER5Tnn9c7mJS1y982MmjVOTc1D3MunscD/wUJnWrcAHgPdHxEkm55huK2+5Dbi4DH8/cHODckuS1lzU/O1ya2srt7e3hy6GJKlDEXFfZm7NDvdOEpKkKhlQLdjUHjaShrfO+x4DqoGdD8am9rCR/HI2vHXe95y7/yjazTp/MKRFuA2oSx5BSZKqZEBJ0sBsKp3PJj5JGphNpfN5BCVJqpIBJUmqkgElSaqSASVJqpIBJUmqkr34lrRXV1B74khSewyoJRlCktQPm/gkSVUyoCRJVTKgJElVMqAkSVUyoCRJVTKgtBa8E7S0fgworQW7/0vrx4CSJFXJgJIkVcmAkiRVyYCSJFXJgJIkVcmAkiRVyYCSJFXJgJIkVcmAkiRVad+AioiPRsSzEfHw1LCLIuKuiHi8/L+wDI+I+EhEnIyIByPiiqn3HC3jPx4RR7upjiRpXSxyBPWrwDUzw24G7s7Mw8Dd5TnAtcDh8ncMuAUmgQb8HPCXgLcCP7cTapIkzbNvQGXmbwPPzQw+Ahwvj48D108Nvz0n7gEuiIhLgHcAd2Xmc5n5PHAXZ4eeJEkvWfUc1Bsy8zRA+f/6Mvwg8NTUeKfKsN2GS5I0V9udJOb95kHuMfzsCUQci4jtiNg+c+ZMq4WTJI3HqgH1TGm6o/x/tgw/BVw6Nd4h4Ok9hp8lM2/NzK3M3Dpw4MCKxZMkjd2qAXUC2OmJdxS4Y2r4jaU335XAC6UJ8LPA1RFxYekccXUZJknSXOfuN0JEfBz4q8DrIuIUk954vwB8KiJuAp4E3lVGvxO4DjgJfBt4N0BmPhcR/xz4Qhnvn2XmbMcLSZJeEjX/EunW1lZub28PXQxJUoci4r7M3Jod7p0kJElVMqAkSVUyoCRJVTKgJElVMqAkSVUyoCRJVTKgJElVMqAkSVUyoCRJVTKgJElVMqAkSVWq+l58EfEt4LGhy9GC1wF/MHQhGrIOdViHOsB61MM6tOf7MvOs31fa927mA3ts3g0ExyYitsdeD+tQh3WoA6xHPaxD92zikyRVyYCSJFWp9oC6degCtGQd6mEd6rAOdYD1qId16FjVnSQkSZur9iMoSdKGqjagIuKaiHgsIk5GxM1Dl2c3EXFpRHw+Ih6NiEci4r1l+M9HxO9FxAPl77qp9/xsqddjEfGO4Ur/soj4ekQ8VMq6XYZdFBF3RcTj5f+FZXhExEdKHR6MiCuGLT1ExA9MLesHIuKbEfG+MayHiPhoRDwbEQ9PDVt62UfE0TL+4xFxtII6/MuI+Eop569HxAVl+GUR8b+n1skvT73nB8vn8GSpZwxch6U/P0Pvu3apxyen6vD1iHigDK9yXbwkM6v7A84Bvga8ETgP+BLw5qHLtUtZLwGuKI+/F/gq8Gbg54F/NGf8N5f6vAq4vNTznArq8XXgdTPD/gVwc3l8M/Ch8vg64DeAAK4E7h26/HM+P78PfN8Y1gPwduAK4OFVlz1wEfBE+X9heXzhwHW4Gji3PP7QVB0umx5vZjr/E/ihUr/fAK4duA5LfX5q2HfNq8fM6/8a+Kc1r4udv1qPoN4KnMzMJzLzO8AngCMDl2muzDydmfeXx98CHgUO7vGWI8AnMvP/ZubvACeZ1LdGR4Dj5fFx4Pqp4bfnxD3ABRFxyRAF3MVVwNcy83f3GKea9ZCZvw08NzN42WX/DuCuzHwuM58H7gKu6b70E/PqkJm/mZkvlqf3AIf2mkapx2sy83/kZA95Oy/Xu3O7rIfd7Pb5GXzftVc9ylHQ3wI+vtc0hl4XO2oNqIPAU1PPT7H3Tr8KEXEZ8Bbg3jLoZ0rzxkd3mmiot24J/GZE3BcRx8qwN2TmaZgEMfD6MrzWOuy4gVdugGNaDzuWXfa11+fvMPkWvuPyiPhiRPy3iPjhMuwgk3LvqKUOy3x+al8PPww8k5mPTw2rdl3UGlDz2jqr7m4YEd8D/Brwvsz8JnAL8GeAvwicZnJYDfXW7W2ZeQVwLfCeiHj7HuPWWgci4jzgncB/LoPGth72s1u5q61PRHwQeBH4WBl0GvjTmfkW4P3Af4qI11BnHZb9/NRYh2k/xSu/vFW9LmoNqFPApVPPDwFPD1SWfUXEdzMJp49l5mcAMvOZzPx/mfnHwL/n5eajKuuWmU+X/88Cv86kvM/sNN2V/8+W0ausQ3EtcH9mPgPjWw9Tll32VdandNb4ceCnS1MRpVnsD8vj+5ics/mzTOow3Qw4eB1W+PxUuR4AIuJc4G8An9wZVvu6qDWgvgAcjojLyzfiG4ATA5dprtKmexvwaGb+4tTw6XMyfx3Y6VFzArghIl4VEZcDh5mcjBxMRJwfEd+785jJye2HmZR1pzfYUeCO8vgEcGPpUXYl8MJOc1QFXvENcUzrYcayy/6zwNURcWFphrq6DBtMRFwDfAB4Z2Z+e2r4gYg4pzx+I5Nl/0Spx7ci4sqyXd3Iy/UexAqfn5r3XT8KfCUzX2q6q35d9N0rY9E/Jr2Vvsok0T84dHn2KOdfYXLo+yDwQPm7DviPwENl+Angkqn3fLDU6zEG6Bkzpw5vZNLb6EvAIzvLG7gYuBt4vPy/qAwP4N+VOjwEbA1dh1KuVwN/CLx2alj164FJoJ4G/ojJN9ebVln2TM7znCx/766gDieZnI/Z2S5+uYz7N8vn7EvA/cBPTE1ni0kIfA34t5SbCQxYh6U/P0Pvu+bVowz/VeDvzoxb5brY+fNOEpKkKtXaxCdJ2nAGlCSpSgaUJKlKBpQkqUoGlCSpSgaUJKlKBpQkqUoGlCSpSv8f9uPD3R95SfQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# not ok , binary erosion !\n",
    "from skimage import morphology\n",
    "from skimage import io\n",
    "from skimage.color import rgb2grey\n",
    "\n",
    "\n",
    "img = io.imread('20.erosion_example.png')\n",
    "\n",
    "img_grayscale = rgb2grey(img)\n",
    "\n",
    "img_erosion = morphology.binary_dilation(img_grayscale)\n",
    "\n",
    "io.imshow(img_erosion)\n",
    "io.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "io.imshow(img_grayscale)\n",
    "io.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy import ndimage\n",
    "a = np.zeros((5, 5))\n",
    "a[2, 2] = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0., 0., 0., 0., 0.],\n",
       "       [0., 0., 0., 0., 0.],\n",
       "       [0., 0., 1., 0., 0.],\n",
       "       [0., 0., 0., 0., 0.],\n",
       "       [0., 0., 0., 0., 0.]])"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[False, False, False, False, False],\n",
       "       [False, False,  True, False, False],\n",
       "       [False,  True,  True,  True, False],\n",
       "       [False, False,  True, False, False],\n",
       "       [False, False, False, False, False]])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ndimage.binary_dilation(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0., 0., 0., 0., 0.],\n",
       "       [0., 0., 1., 0., 0.],\n",
       "       [0., 1., 1., 1., 0.],\n",
       "       [0., 0., 1., 0., 0.],\n",
       "       [0., 0., 0., 0., 0.]])"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ndimage.binary_dilation(a).astype(a.dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "from PIL import ImageFilter\n",
    "from PIL import Image\n",
    "my_kernel = ImageFilter.Kernel((3,3),[1,2,3,4,5,6,7,8,9])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "img = Image.open('japan.jpg')\n",
    "img = img.convert(\"L\")\n",
    "new_img = img.filter(ImageFilter.Kernel((3,3),[99,2,3,-99,5,6,7,8,9]))\n",
    "new_img.show()\n",
    "img.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "metadata": {
     "collapsed": false
    },
    "source": []
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
